`
https://leetcode.cn/problems/first-missing-positive/
`

/**
 * @param {number[]} nums
 * @return {number}
 */
var firstMissingPositive = function (nums) {
  const n = nums.length
  // 先遍历一遍数组，把合法的数字 [1, n + 1] 放到对应的位置上去
  for (let i = 0; i < n; i++) {
    while (nums[i] >= 1 && nums[i] <= n + 1 && nums[i] !== nums[nums[i] - 1]) {
      swap(nums, i, nums[i] - 1)
    }
  }

  // 再遍历一次数组，如果数字不在对应的位置上，那么当前下标 + 1就是答案
  for (let i = 0; i < n; i++) {
    if (nums[i] !== i + 1) {
      return i + 1
    }
  }

  return n + 1
};

function swap(nums, idx1, idx2) {
  const tmp = nums[idx1];
  nums[idx1] = nums[idx2];
  nums[idx2] = tmp
}